<ol>
	<li>
	<h2><strong>为何而写</strong></h2>
	网上关于bytebuffer的文章真的很多，为何在此还要写一篇呢？主要是基于以下几点考虑

	<ol>
		<li>很多人在使用<a href="https://www.oschina.net/p/t-io" target="_blank">t-io</a>时，还不会bytebuffer，只会照着<a href="https://www.oschina.net/p/t-io" target="_blank">t-io</a>提供的例子照猫画虎，不利于灵活运用</li>
		<li>网上搜到的一些相关文章，讲得不是太易懂，不利于初学者灵活运用bytebuffer</li>
		<li>本文旨在讲解灵活运用bytebuffer所需的最小知识，以帮助用户快速掌握bytebuffer</li>
	</ol>
	</li>
	
	
	<li>
		
		<h2><strong>用极易的方式认识一下bytebuffer</strong></h2>
		<ol>
			<li>
				<h3><strong>bytebuffer之第一眼印象</strong></h3>
				
				我们可以把bytebuffer理解成如下几个成员组成的一个新对象，对，就是一个普通的java对象，像string一样的java对象。（<span style="color:#006400"><strong>强调一下，这里只是说这样理解，实际上有些bytebuffer的实现类并非这样实现，并且这里只列出掌握bytebuffer所需要的最小知识集合，其它诸如mark等字段本文并不介绍，以免增加初学者的惑度</strong></span>）

				<ol>
					<li><strong>byte[] bytes</strong>: 用来存储数据</li>
					<li><strong>int capacity</strong>: 用来表示bytes的容量，那么可以想像capacity就等于bytes.size()，此值在初始化bytes后，是<span style="color:#FF0000"><strong>不可变</strong></span>的。</li>
					<li><strong>int limit</strong>: 用来表示bytes实际装了多少数据，可以容易想像得到limit &lt;= capacity，此值是<strong><span style="color:#FF0000">可灵活变动的</span></strong></li>
					<li><strong>int position</strong>: 用来表示在哪个位置开始往bytes写数据或是读数据，此值是<strong><span style="color:#FF0000">可灵活变动的</span></strong></li>
				</ol>
				通过下图，对bytebuffer形成一个感观认识吧<br><img alt=""  src="https://git.oschina.net/tywo45/t-io/raw/master/docs/blog/t-io%E7%B3%BB%E5%88%97%E6%96%87%E6%A1%A3%E4%B9%8Bbytebuffer%E5%85%A5%E9%97%A8%E4%B8%8E%E6%8A%80%E5%B7%A7%EF%BC%882%EF%BC%89/bytebuffer-1.png"  />
				
			</li>
			<li><h3><strong>bytebuffer之常用操作及各操作对内部变量带来的变化</strong></h3>
				<ol>
					<li><h4>创建bytebuffer: ByteBuffer.allocate(6)</h4>
						<div><img alt="" src="https://git.oschina.net/tywo45/t-io/raw/master/docs/blog/t-io%E7%B3%BB%E5%88%97%E6%96%87%E6%A1%A3%E4%B9%8Bbytebuffer%E5%85%A5%E9%97%A8%E4%B8%8E%E6%8A%80%E5%B7%A7%EF%BC%882%EF%BC%89/allocate.png"  /></div>
					</li>
					<li><h4>写入一个字节: byteBuffer.put((byte)3)</h4>
						<div><img alt="" src="./put.png"  /></div>
					</li>
					<li><h4>读取一个字节: byte bs = byteBuffer.get()</h4>
						对于刚刚写好的bytebuffer，我们要读取它的内容，需要先设置一下position和limit，否则读的位置就不对
						<pre>
<code class="language-java">
byteBuffer.position(0);  //设置position到0位置，这样读数据时就从这个位置开始读
byteBuffer.limit(1);     //设置limit为1，表示当前bytebuffer的有效数据长度是1
</code></pre>
我们看一下，设置position和limit后，bytebuffer的内部变化
						<div><img alt="" src="./positionAndLimit.png"  /></div>

						接下来，我们就可以读取刚才写入的数据了
						<pre>
<code class="language-java">
byte bs = byteBuffer.get();
</code></pre>
						<div><img alt="" src="./get.png"  /></div>
					</li>
				</ol>
			
			</li>
			
			
			<li><h3><strong>bytebuffer之使用心得</strong></h3></li>
		</ol>
		
		
	
	</li>
	
	
	<li>
	<h2><strong>bytebuffer技巧</strong></h2>
	</li>
	
	
	<li>
	<h2><strong>bytebuffer在t-io中的运用</strong></h2>
	</li>
	
	
	<li>
	<h2><strong>bytebuffer的救命程序</strong></h2>
	</li>
	
	
</ol>
